package leetCode;

import java.util.ArrayList;
import java.util.List;

/**
 * @PackageName: leetCode
 * @ClassName: LeetCode1447
 * @Author: chen jinxu
 * @Date: 2022/2/10 22:28
 * @Description:
 * 给你一个整数 n ，请你返回所有 0 到 1 之间（不包括 0 和 1）满足分母小于等于  n 的 最简 分数 。
 * 分数可以以 任意 顺序返回。
 * 输入：n = 2
 * 输出：["1/2"]
 * 解释："1/2" 是唯一一个分母小于等于 2 的最简分数。
 *   输入：n = 3
 * 输出：["1/2","1/3","2/3"]
 * 输入：n = 4
 * 输出：["1/2","1/3","1/4","2/3","3/4"]
 * 解释："2/4" 不是最简分数，因为它可以化简为 "1/2" 。
 * 输入：n = 1
 * 输出：[]
 * 1 <= n <= 100
 */
public class LeetCode1447 {
    public static void main(String[] args) {
        int n = 4;
        List<String> result = simplifiedFractions(n);
        System.out.println(result);
    }
    public static List<String> simplifiedFractions(int n) {
        List<String> result = new ArrayList<>();
        for (int i = 2; i <= n; i++) { // 分母
            for (int j = 1; j < i; j++) {    // 分子
                if (gcd(i, j) == 1) {
                 result.add(j + "/" + i);
                }
            }
        }
        return result;
    }
    // 求 i 和 j 的最大公约数
    private static int gcd(int i, int j) {
        if (i % j == 0) {
            return j;
        }
        return gcd(j, i % j);
    }
}
